# 通过装饰器实现函数的性能打印
# 所谓的装饰器,其实就是通过装饰器函数,在不修改原函数的前提下,额外增加一些通用的处理逻辑,使得原函数得到了必要的增强
# 装饰器是一种类似AOP的编程思想
import functools
import time


# 定义装饰器,打印函数的执行耗时
def perf_log(f):
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        f(*args, **kwargs)
        end = time.perf_counter()
        print(f'function: {f.__name__}, costs: {end - start}')

    return wrapper


# 业务处理函数,使用@perf_log装饰器
@perf_log
def business_processing():
    # 模拟耗时的业务处理
    print('business processing...')
    time.sleep(2)


if __name__ == '__main__':
    business_processing()
